using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using UwinEducation.Domain.Entities;
using UwinEducation.Shared.Models;

namespace UwinEducation.Domain.IRepositories
{
    /// <summary>
    /// 教师假期仓储接口
    /// </summary>
    public interface ITeacherVacationRepository : IRepository<TeacherVacation, Guid>
    {
        /// <summary>
        /// 获取教师假期分页列表
        /// </summary>
        /// <param name="pageRequest">分页请求参数</param>
        Task<PagedResult<TeacherVacation>> GetPagedListAsync(TeacherVacationPageRequest pageRequest);

        /// <summary>
        /// 获取教师假期详情
        /// </summary>
        /// <param name="id">假期ID</param>
        Task<TeacherVacation> GetDetailsByIdAsync(Guid id);

        /// <summary>
        /// 根据教师ID获取所有假期
        /// </summary>
        /// <param name="teacherId">教师ID</param>
        Task<List<TeacherVacation>> GetByTeacherIdAsync(Guid teacherId);

        /// <summary>
        /// 根据日期范围获取假期
        /// </summary>
        /// <param name="teacherId">教师ID</param>
        /// <param name="startDate">开始日期</param>
        /// <param name="endDate">结束日期</param>
        Task<List<TeacherVacation>> GetByDateRangeAsync(Guid teacherId, DateTime startDate, DateTime endDate);

        /// <summary>
        /// 检查时间冲突
        /// </summary>
        /// <param name="teacherId">教师ID</param>
        /// <param name="startTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <param name="excludeId">需要排除的ID</param>
        Task<bool> HasTimeConflictAsync(Guid teacherId, DateTime startTime, DateTime endTime, Guid? excludeId = null);
    }
} 